package com.softtown.modules.sys.service;

import com.github.pagehelper.PageInfo;
import com.softtown.common.service.BaseService;
import com.softtown.modules.organization.dto.CompSysParamIsRequiredDTO;
import com.softtown.modules.sys.dto.CompSysParamDTO;
import com.softtown.modules.sys.dto.CompSysParamPageDTO;
import com.softtown.modules.sys.entity.CompSysParamEntity;

/**
 * @author: Dingyayong
 * @Date: 2019/7/30 17:54
 * @Description:
 */
public interface CompSysParamService extends BaseService<CompSysParamEntity> {

    /**
     * 根据公司ID找费目层级
     *
     * @param compId
     * @return
     * @author Dingyayong
     * @date 2019/6/6 17:25
     */
    CompSysParamEntity findItemMaxLevel(Long compId);

    /**
     * 根据公司ID找默认币种
     *
     * @param compId
     * @return
     * @author Dingyayong
     * @date 2019/6/6 17:25
     */
    CompSysParamEntity findCurrValue(Long compId);

    /**
     * 通过公司ID来查找费用归集码必须参数值
     * @param companyId
     * @return com.softtown.modules.sys.entity.CompSysParamEntity
     * @Author fuming
     * @Date 2020/5/27 11:14
     */
    CompSysParamEntity findExpClctCdIsReqTrvlExpPlanValue(Long companyId);

    /**
     * 通过公司ID来查找行程明细必须参数值
     * @param companyId
     * @return com.softtown.modules.sys.entity.CompSysParamEntity
     * @Author fuming
     * @Date 2020/5/27 11:15
     */
    CompSysParamEntity findTodoIsReqTrvlExpPlanValue(Long companyId);

    /**
     * 添加公司部门变更履历参数
     *
     * @param compSysParamDTO
     * @return
     * @author Dingyayong
     * @date 2019/6/6 17:25
     */
    void addCompParam(CompSysParamDTO compSysParamDTO);

    /**
     * 差旅报销前出差申请必须
     *
     * @param compSysParamDTO 公司参数DTO
     * @return CompSysParamEntity
     * @author Dingyayong
     * @date 2019/6/6 17:25
     */
    CompSysParamEntity checkExpenseAppl(CompSysParamDTO compSysParamDTO);

    /**
     * 获取差旅报销前出差申请是否必须
     *
     * @param compSysParamIsRequiredDTO 公司参数是否必填DTO
     * @return Boolean
     * @author Dingyayong
     * @date 2019-12-26 11:30:08
     */
    Boolean getTrvlIsRequired(CompSysParamIsRequiredDTO compSysParamIsRequiredDTO);

    /**
     * 获取差旅报销前费用归集码是否必须
     *
     * @param compSysParamIsRequiredDTO 公司参数是否必填DTO
     * @return Boolean
     * @author Dingyayong
     * @date 2019-12-26 11:30:08
     */
    Boolean getTrvlActClcdIsRequired(CompSysParamIsRequiredDTO compSysParamIsRequiredDTO);

    /**
     * 获取费用报销前事前申请单是否必须
     *
     * @param compSysParamIsRequiredDTO 公司参数是否必填DTO
     * @return Boolean
     * @author Dingyayong
     * @date 2019-12-26 11:30:08
     */
    Boolean getGenlActIsRequired(CompSysParamIsRequiredDTO compSysParamIsRequiredDTO);

    /**
     * 获取费用报销前费用归集码是否必须
     *
     * @param compSysParamIsRequiredDTO 公司参数是否必填DTO
     * @return Boolean
     * @author Dingyayong
     * @date 2019-12-26 11:30:08
     */
    Boolean getGenlActClcdIsRequired(CompSysParamIsRequiredDTO compSysParamIsRequiredDTO);

    /**
     * 自己审批自己单据
     *
     * @param compSysParamDTO
     * @return
     * @author Dingyayong
     * @date 2019/6/6 17:25
     */
    CompSysParamEntity checkApplBySelf(CompSysParamDTO compSysParamDTO);

    /**
     * 获取费用归集码是否必须(差旅报销)
     *
     * @param compSysParamDTO
     * @return
     * @author Dingyayong
     * @date 2019/6/6 17:25
     */
    CompSysParamEntity getExpClctCdExpense(CompSysParamDTO compSysParamDTO);

    /**
     * 费用发生/核销确定基准
     *
     * @param compSysParamDTO
     * @return
     * @author Dingyayong
     * @date 2019/6/6 17:25
     */
    CompSysParamEntity getGenlExpActTiMing(CompSysParamDTO compSysParamDTO);

    /**
     * 根据公司id费用发生/核销确定基准
     *
     * @param compId 公司id
     * @return CompSysParamEntity
     * @author Dingyayong
     * @date 2019/6/6 17:25
     */
    CompSysParamEntity getGenlExpActTiMing(Long compId);

    /**
     * 修改公司参数
     *
     * @param compSysParamDTO
     * @return
     * @author Dingyayong
     * @date 2019/10/17 14:02
     */
    void editCompParam(CompSysParamDTO compSysParamDTO);

    /**
     * 获取公司参数
     * @param compId
     * @param paramCode
     * @return com.softtown.modules.sys.entity.CompSysParamEntity
     * @Author fuming
     * @Date 2020/5/27 11:16
     */
    CompSysParamEntity findValueByCompAndCode(Long compId, String paramCode);

    /**
     * 获取所有公司参数
     *
     * @param compSysParamPageDTO
     * @return getCompParamsList
     * @author Dingyayong
     * @date 2019/10/17 14:49
     */
    PageInfo<CompSysParamEntity> getCompParamsList(CompSysParamPageDTO compSysParamPageDTO);

    /**
     * 获取费用申请前费用归集码是否必须
     *
     * @param compSysParamIsRequiredDTO 公司参数是否必填DTO
     * @return java.lang.Boolean
     * @Author fuming
     * @Date 2019/12/30 10:59
     */
    Boolean getGenlPlanClcdIsRequired(CompSysParamIsRequiredDTO compSysParamIsRequiredDTO);

    /**
     * 获取支付费用归集码是否必须
     *
     * @param compSysParamIsRequiredDTO 公司参数是否必填DTO
     * @return java.lang.Boolean
     * @Author fuming
     * @Date 2019/12/30 10:59
     */
    Boolean getSpdPayClctCdIsRequired(CompSysParamIsRequiredDTO compSysParamIsRequiredDTO);

    /**
     * 获取请款单据号否必须
     *
     * @param compSysParamIsRequiredDTO 公司参数是否必填DTO
     * @return java.lang.Boolean
     * @Author fuming
     * @Date 2019/12/30 10:59
     */
    Boolean getRequiredPay(CompSysParamIsRequiredDTO compSysParamIsRequiredDTO);
}
